// SPDX-FileCopyrightText: SAP SE or an SAP affiliate company and Gardener contributors
//
// SPDX-License-Identifier: Apache-2.0

package e2e

// BeforeTestSetup looks like a ginkgo setup node but runs the given function right away, i.e., during ginkgo's tree
// construction. It's sole purpose is to structure test setup code similar to BeforeEach and friends, while allowing to
// use the side effects when constructing further test nodes.
//
// The primary use case is initializing `TestContext` structs that carry test state like clients, objects, etc. through
// common `It`s generated by helper functions. For example:
//
//	Context("Ordered test case", Ordered, func() {
//	  var c *TestContext
//	  BeforeTestSetup(func() {
//	    c = NewTestContext()
//	  })
//	  ItShouldDoStuff(c)
//	})
//
// If the `TestContext` would be initialized in a setup node like BeforeEach, the helper function receive a nil param.
// The only alternative is implementing an initialization method on the `TestContext`. However, sharing the context
// variable in multiple containers (i.e., test cases) would require zeroing the context before the initialization, which
// is easy to forget and might lead to surprises.
func BeforeTestSetup(f func()) {
	f()
}
